<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>数组去重</title>
</head>
<body>
  <script>
    /* 
    [1, 3, 5, 1, 6, 3, 4]
    双层遍历 ==> 效率低些
    */
    function unique (arr) {
      const result = []
      // 遍历arr
      arr.forEach(item => {
        // 如果item没在result才放入
        // if (!result.includes(item)) { 
        if (result.indexOf(item)===-1) {  // 内部在遍历result数组
          result.push(item)
        }
      })

      return result
    }

    /* 
    单层遍历 + 对象容器
     [1, 3, 5, 1, 6, 3, 4]
    */
    function unique (arr) {
      const result = []
      const container = {} // 占用了更多的空间==> 以空间换时间
      // 遍历arr
      arr.forEach(item => {
        // 如果item没在result才放入
        // if (!container[item]) { // 问题: 会查找原型链, 效率低, 且没有必要
        if (!container.hasOwnProperty(item)) { // 在对象自身上查找判断
          // 将当前item作为属性名保存到对象容器中
          container[item] = true
          result.push(item)
        }
      })

      return result
    }
    // 以空间换时间: 占用更大空间, 但减法查找等操作, 实现更快运行(时间更少了)


    /*
    方法3: 利用ES6语法
        1). from + Set
        2). ... + Set
        说明: 编码简洁
    */
    function unique (array) {
      // return Array.from(new Set(array))
      return [...new Set(array)]
    }

   
    const arr = [1, 3, 5, 1, 6, 3, 4] 
    console.log(unique(arr)) //  [1, 3, 5, 6, 4]


  </script>
</body>
</html>